Micron Document
welo git mirrors

Node / public / reticulum / files / docs / manual / examples.html

Displaying Raw • Download

docs/manual/examples.html 0fe76d50f654bd05cbb70b05de70e8a41ef3c0c0 (0fe76d50) Text, 239.61 KB

Tff7b72<!DOCTYPE html>

Tb4b4b4<Tff7b72htmlTb4b4b4>
Tb4b4b4<Tff7b72headTb4b4b4>
Tb4b4b4<Tff7b72meta Te6edf3charsetTff7b72=Ta5d6ff"utf-8" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72meta Te6edf3nameTff7b72=Ta5d6ff"viewport" Te6edf3contentTff7b72=Ta5d6ff"width=device-width, initial-scale=1.0" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72titleTb4b4b4>Examples Te6edf3&#8212; Reticulum Network Stack 0.2.4 beta documentationTb4b4b4<Tb4b4b4/Tff7b72titleTb4b4b4>
Tb4b4b4<Tff7b72link Te6edf3relTff7b72=Ta5d6ff"stylesheet" Te6edf3typeTff7b72=Ta5d6ff"text/css" Te6edf3hrefTff7b72=Ta5d6ff"_static/pygments.css" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72link Te6edf3relTff7b72=Ta5d6ff"stylesheet" Te6edf3typeTff7b72=Ta5d6ff"text/css" Te6edf3hrefTff7b72=Ta5d6ff"_static/classic.css" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72script Te6edf3data-url_rootTff7b72=Ta5d6ff"./" Te6edf3idTff7b72=Ta5d6ff"documentation_options" Te6edf3srcTff7b72=Ta5d6ff"_static/documentation_options.js"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72scriptTb4b4b4>
Tb4b4b4<Tff7b72script Te6edf3srcTff7b72=Ta5d6ff"_static/jquery.js"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72scriptTb4b4b4>
Tb4b4b4<Tff7b72script Te6edf3srcTff7b72=Ta5d6ff"_static/underscore.js"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72scriptTb4b4b4>
Tb4b4b4<Tff7b72script Te6edf3srcTff7b72=Ta5d6ff"_static/doctools.js"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72scriptTb4b4b4>
Tb4b4b4<Tff7b72link Te6edf3relTff7b72=Ta5d6ff"index" Te6edf3titleTff7b72=Ta5d6ff"Index" Te6edf3hrefTff7b72=Ta5d6ff"genindex.html" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72link Te6edf3relTff7b72=Ta5d6ff"search" Te6edf3titleTff7b72=Ta5d6ff"Search" Te6edf3hrefTff7b72=Ta5d6ff"search.html" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72link Te6edf3relTff7b72=Ta5d6ff"prev" Te6edf3titleTff7b72=Ta5d6ff"API Reference" Te6edf3hrefTff7b72=Ta5d6ff"reference.html" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72headTb4b4b4>Tb4b4b4<Tff7b72bodyTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"related" Te6edf3roleTff7b72=Ta5d6ff"navigation" Te6edf3aria-labelTff7b72=Ta5d6ff"related navigation"Tb4b4b4>
Tb4b4b4<Tff7b72h3Tb4b4b4>NavigationTb4b4b4<Tb4b4b4/Tff7b72h3Tb4b4b4>
Tb4b4b4<Tff7b72ulTb4b4b4>
Tb4b4b4<Tff7b72li Te6edf3classTff7b72=Ta5d6ff"right" Te6edf3styleTff7b72=Ta5d6ff"margin-right: 10px"Tb4b4b4>
Tb4b4b4<Tff7b72a Te6edf3hrefTff7b72=Ta5d6ff"genindex.html" Te6edf3titleTff7b72=Ta5d6ff"General Index"
Te6edf3accesskeyTff7b72=Ta5d6ff"I"Tb4b4b4>indexTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72li Te6edf3classTff7b72=Ta5d6ff"right" Tb4b4b4>
Tb4b4b4<Tff7b72a Te6edf3hrefTff7b72=Ta5d6ff"reference.html" Te6edf3titleTff7b72=Ta5d6ff"API Reference"
Te6edf3accesskeyTff7b72=Ta5d6ff"P"Tb4b4b4>previousTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4> |Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72li Te6edf3classTff7b72=Ta5d6ff"nav-item nav-item-0"Tb4b4b4>Tb4b4b4<Tff7b72a Te6edf3hrefTff7b72=Ta5d6ff"index.html"Tb4b4b4>Reticulum Network Stack 0.2.4 beta documentationTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4> Te6edf3&#187;Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72li Te6edf3classTff7b72=Ta5d6ff"nav-item nav-item-this"Tb4b4b4>Tb4b4b4<Tff7b72a Te6edf3hrefTff7b72=Ta5d6ff""Tb4b4b4>ExamplesTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72ulTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>

Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"document"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"documentwrapper"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"bodywrapper"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"body" Te6edf3roleTff7b72=Ta5d6ff"main"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"section" Te6edf3idTff7b72=Ta5d6ff"examples"Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3idTff7b72=Ta5d6ff"examples-main"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72h1Tb4b4b4>ExamplesTb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"headerlink" Te6edf3hrefTff7b72=Ta5d6ff"#examples" Te6edf3titleTff7b72=Ta5d6ff"Permalink to this headline"Tb4b4b4>¶Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72h1Tb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>A number of examples are included in the source distribution of Reticulum.
You can use these examples to learn how to write your own programs.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"section" Te6edf3idTff7b72=Ta5d6ff"minimal"Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3idTff7b72=Ta5d6ff"example-minimal"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72h2Tb4b4b4>MinimalTb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"headerlink" Te6edf3hrefTff7b72=Ta5d6ff"#minimal" Te6edf3titleTff7b72=Ta5d6ff"Permalink to this headline"Tb4b4b4>¶Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72h2Tb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>The Tb4b4b4<Tff7b72emTb4b4b4>MinimalTb4b4b4<Tb4b4b4/Tff7b72emTb4b4b4> example demonstrates the bare-minimum setup required to connect to
a Reticulum network from your program. In about five lines of code, you will
have the Reticulum Network Stack initialised, and ready to pass traffic in your
program.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-default notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>##########################################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># This RNS example demonstrates a minimal setup, that #Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># will start up the Reticulum Network Stack, generate a #Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># new destination, and let the user send an announce. #Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>##########################################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kn"Tb4b4b4>importTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nn"Tb4b4b4>argparseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kn"Tb4b4b4>importTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nn"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># LetTe6edf3&#39;s define an app name. WeTe6edf3&#39;ll use this for allTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># destinations we create. Since this basic exampleTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># is part of a range of example utilities, weTe6edf3&#39;ll putTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># them all within the app namespace Te6edf3&quot;example_utilitiesTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>APP_NAMETb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;example_utilitiesTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># This initialisation is executed when the program is startedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nf"Tb4b4b4>program_setupTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configpathTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># We must first initialise ReticulumTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>reticulumTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>ReticulumTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configpathTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># Randomly create a new identity for our exampleTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>identityTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>IdentityTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># Using the identity we just created, we create a destination.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># Destinations are endpoints in Reticulum, that can be addressedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># and communicated with. Destinations can also announce theirTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># existence, which will let the network know they are reachableTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># and autoomatically create paths to them, from anywhere elseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># in the network.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>DestinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>identityTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>DestinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>INTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>DestinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>SINGLETb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>APP_NAMETb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;minimalsampleTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># We configure the destination to automatically prove allTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># packets adressed to it. By doing this, RNS will automaticallyTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># generate a proof for each incoming packet and transmit itTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># back to the sender of that packet. This will let anyone thatTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># tries to communicate with the destination know whether theirTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># communication was received correctly.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>set_proof_strategyTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>DestinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>PROVE_ALLTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># EverythingTe6edf3&#39;s ready!Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># LetTe6edf3&#39;s hand over control to the announce loopTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>announceLoopTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>


Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nf"Tb4b4b4>announceLoopTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># Let the user know that everything is readyTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Minimal example Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>prettyhexrepTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>hashTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot; running, hit enter to manually send an announce (Ctrl-C to quit)Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># We enter a loop that runs until the users exits.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># If the user hits enter, we will announce our serverTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># destination on the network, which will let clientsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># know how to create messages directed towards it.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>whileTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>TrueTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>enteredTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>inputTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>announceTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Sent announce from Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>prettyhexrepTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>hashTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>))Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>


Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>##########################################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>#### Program Startup #####################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>##########################################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># This part of the program gets run at startup,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># and parses input from the user, and then startsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># the desired program mode.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"vm"Tb4b4b4>__name__Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>==Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;__main__Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>tryTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>parserTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>argparseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>ArgumentParserTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>descriptionTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Minimal example to start Reticulum and create a destinationTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>parserTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>add_argumentTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;--configTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>actionTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;storeTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>defaultTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>NoneTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>helpTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;path to alternative Reticulum config directoryTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>typeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>strTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>argsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>parserTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>parse_argsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>argsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configargTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>argsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>elseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configargTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>NoneTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>program_setupTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configargTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>exceptTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"ne"Tb4b4b4>KeyboardInterruptTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>printTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>exitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>This example can also be found at Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference external" Te6edf3hrefTff7b72=Ta5d6ff"https://github.com/markqvist/Reticulum/blob/master/Examples/Minimal.py"Tb4b4b4>https://github.com/markqvist/Reticulum/blob/master/Examples/Minimal.pyTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"section" Te6edf3idTff7b72=Ta5d6ff"announce"Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3idTff7b72=Ta5d6ff"example-announce"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72h2Tb4b4b4>AnnounceTb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"headerlink" Te6edf3hrefTff7b72=Ta5d6ff"#announce" Te6edf3titleTff7b72=Ta5d6ff"Permalink to this headline"Tb4b4b4>¶Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72h2Tb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>The Tb4b4b4<Tff7b72emTb4b4b4>AnnounceTb4b4b4<Tb4b4b4/Tff7b72emTb4b4b4> example builds upon the previous example by exploring how to
announce a destination on the network, and how to let your program receive
notifications about announces from relevant destinations.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-default notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>##########################################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># This RNS example demonstrates setting up announce #Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># callbacks, which will let an application receive a #Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># notification when an announce relevant for it arrives #Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>##########################################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kn"Tb4b4b4>importTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nn"Tb4b4b4>argparseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kn"Tb4b4b4>importTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nn"Tb4b4b4>randomTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kn"Tb4b4b4>importTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nn"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># LetTe6edf3&#39;s define an app name. WeTe6edf3&#39;ll use this for allTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># destinations we create. Since this basic exampleTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># is part of a range of example utilities, weTe6edf3&#39;ll putTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># them all within the app namespace Te6edf3&quot;example_utilitiesTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>APP_NAMETb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;example_utilitiesTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># We initialise two lists of strings to use as app_dataTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>fruitsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>[Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;PeachTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;QuinceTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Date palmTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;TangerineTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;PomeloTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;CarambolaTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;GrapeTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>]Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>noble_gasesTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>[Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;HeliumTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;NeonTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;ArgonTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;KryptonTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;XenonTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;RadonTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;OganessonTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>]Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># This initialisation is executed when the program is startedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nf"Tb4b4b4>program_setupTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configpathTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># We must first initialise ReticulumTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>reticulumTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>ReticulumTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configpathTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># Randomly create a new identity for our exampleTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>identityTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>IdentityTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># Using the identity we just created, we create two destinationsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># in the Te6edf3&quot;example_utilities.announcesampleTe6edf3&quot; application space.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>#Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># Destinations are endpoints in Reticulum, that can be addressedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># and communicated with. Destinations can also announce theirTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># existence, which will let the network know they are reachableTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># and autoomatically create paths to them, from anywhere elseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># in the network.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destination_1Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>DestinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>identityTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>DestinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>INTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>DestinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>SINGLETb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>APP_NAMETb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;announcesampleTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;fruitsTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destination_2Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>DestinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>identityTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>DestinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>INTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>DestinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>SINGLETb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>APP_NAMETb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;announcesampleTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;noble_gasesTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># We configure the destinations to automatically prove allTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># packets adressed to it. By doing this, RNS will automaticallyTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># generate a proof for each incoming packet and transmit itTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># back to the sender of that packet. This will let anyone thatTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># tries to communicate with the destination know whether theirTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># communication was received correctly.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destination_1Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>set_proof_strategyTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>DestinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>PROVE_ALLTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destination_2Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>set_proof_strategyTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>DestinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>PROVE_ALLTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># We create an announce handler and configure it to only ask forTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># announces from Te6edf3&quot;example_utilities.announcesample.fruitsTe6edf3&quot;.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># Try changing the filter and see what happens.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>announce_handlerTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>ExampleAnnounceHandlerTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>aspect_filterTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;example_utilities.announcesample.fruitsTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># We register the announce handler with ReticulumTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>TransportTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>register_announce_handlerTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>announce_handlerTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># EverythingTe6edf3&#39;s ready!Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># LetTe6edf3&#39;s hand over control to the announce loopTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>announceLoopTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destination_1Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destination_2Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>


Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nf"Tb4b4b4>announceLoopTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destination_1Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destination_2Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># Let the user know that everything is readyTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Announce example running, hit enter to manually send an announce (Ctrl-C to quit)Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># We enter a loop that runs until the users exits.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># If the user hits enter, we will announce our serverTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># destination on the network, which will let clientsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># know how to create messages directed towards it.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>whileTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>TrueTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>enteredTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>inputTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># Randomly select a fruitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>fruitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>fruitsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>[Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>randomTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>randintTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"mi"Tb4b4b4>0Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>lenTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>fruitsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>-Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"mi"Tb4b4b4>1Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)]Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># Send the announce including the app dataTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destination_1Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>announceTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>app_dataTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>fruitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>encodeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;utf-8Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>))Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Sent announce from Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>prettyhexrepTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destination_1Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>hashTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot; (Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destination_1Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>nameTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;)Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># Randomly select a noble gasTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>noble_gasTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>noble_gasesTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>[Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>randomTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>randintTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"mi"Tb4b4b4>0Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>lenTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>noble_gasesTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>-Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"mi"Tb4b4b4>1Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)]Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># Send the announce including the app dataTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destination_2Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>announceTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>app_dataTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>noble_gasTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>encodeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;utf-8Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>))Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Sent announce from Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>prettyhexrepTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destination_2Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>hashTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot; (Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destination_2Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>nameTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;)Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># We will need to define an announce handler class thatTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># Reticulum can message when an announce arrives.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>classTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nc"Tb4b4b4>ExampleAnnounceHandlerTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># The initialisation method takes the optionalTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># aspect_filter argument. If aspect_filter is set toTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># None, all announces will be passed to the instance.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># If only some announces are wanted, it can be set toTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># an aspect string.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"fm"Tb4b4b4>__init__Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"bp"Tb4b4b4>selfTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>aspect_filterTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>NoneTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"bp"Tb4b4b4>selfTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>aspect_filterTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>aspect_filterTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># This method will be called by Reticulums TransportTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># system when an announce arrives that matches theTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># configured aspect filter. Filters must be specific,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># and cannot use wildcards.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nf"Tb4b4b4>received_announceTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"bp"Tb4b4b4>selfTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destination_hashTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>announced_identityTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>app_dataTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Received an announce from Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>prettyhexrepTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destination_hashTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;The announce contained the following app data: Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>app_dataTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>decodeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;utf-8Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>##########################################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>#### Program Startup #####################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>##########################################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># This part of the program gets run at startup,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># and parses input from the user, and then startsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># the desired program mode.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"vm"Tb4b4b4>__name__Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>==Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;__main__Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>tryTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>parserTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>argparseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>ArgumentParserTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>descriptionTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Reticulum example that demonstrates announces and announce handlersTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>parserTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>add_argumentTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;--configTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>actionTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;storeTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>defaultTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>NoneTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>helpTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;path to alternative Reticulum config directoryTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>typeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>strTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>argsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>parserTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>parse_argsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>argsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configargTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>argsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>elseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configargTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>NoneTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>program_setupTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configargTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>exceptTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"ne"Tb4b4b4>KeyboardInterruptTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>printTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>exitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>This example can also be found at Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference external" Te6edf3hrefTff7b72=Ta5d6ff"https://github.com/markqvist/Reticulum/blob/master/Examples/Announce.py"Tb4b4b4>https://github.com/markqvist/Reticulum/blob/master/Examples/Announce.pyTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"section" Te6edf3idTff7b72=Ta5d6ff"broadcast"Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3idTff7b72=Ta5d6ff"example-broadcast"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72h2Tb4b4b4>BroadcastTb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"headerlink" Te6edf3hrefTff7b72=Ta5d6ff"#broadcast" Te6edf3titleTff7b72=Ta5d6ff"Permalink to this headline"Tb4b4b4>¶Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72h2Tb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>The Tb4b4b4<Tff7b72emTb4b4b4>BroadcastTb4b4b4<Tb4b4b4/Tff7b72emTb4b4b4> example explores how to transmit plaintext broadcast messages
over the network.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-default notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>##########################################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># This RNS example demonstrates broadcasting unencrypted #Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># information to any listening destinations. #Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>##########################################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kn"Tb4b4b4>importTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nn"Tb4b4b4>sysTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kn"Tb4b4b4>importTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nn"Tb4b4b4>argparseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kn"Tb4b4b4>importTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nn"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># LetTe6edf3&#39;s define an app name. WeTe6edf3&#39;ll use this for allTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># destinations we create. Since this basic exampleTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># is part of a range of example utilities, weTe6edf3&#39;ll putTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># them all within the app namespace Te6edf3&quot;example_utilitiesTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>APP_NAMETb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;example_utilitiesTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># This initialisation is executed when the program is startedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nf"Tb4b4b4>program_setupTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configpathTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>channelTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>NoneTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># We must first initialise ReticulumTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>reticulumTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>ReticulumTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configpathTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># If the user did not select a Te6edf3&quot;channelTe6edf3&quot; we useTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># a default one called Te6edf3&quot;public_informationTe6edf3&quot;.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># This Te6edf3&quot;channelTe6edf3&quot; is added to the destination name-Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># space, so the user can select different broadcastTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># channels.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>channelTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>==Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>NoneTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>channelTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;public_informationTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># We create a PLAIN destination. This is an uncencrypted endpointTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># that anyone can listen to and send information to.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>broadcast_destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>DestinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>NoneTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>DestinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>INTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>DestinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>PLAINTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>APP_NAMETb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;broadcastTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>channelTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># We specify a callback that will get called every timeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># the destination receives data.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>broadcast_destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>set_packet_callbackTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>packet_callbackTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># EverythingTe6edf3&#39;s ready!Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># LetTe6edf3&#39;s hand over control to the main loopTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>broadcastLoopTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>broadcast_destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nf"Tb4b4b4>packet_callbackTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>dataTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>packetTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># Simply print out the received dataTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>printTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>printTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Received data: Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>dataTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>decodeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;utf-8Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"se"Tb4b4b4>\r\nTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&gt; Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>endTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>sysTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>stdoutTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>flushTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nf"Tb4b4b4>broadcastLoopTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># Let the user know that everything is readyTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Broadcast example Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>prettyhexrepTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>hashTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot; running, enter text and hit enter to broadcast (Ctrl-C to quit)Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># We enter a loop that runs until the users exits.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># If the user hits enter, we will send the informationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># that the user entered into the prompt.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>whileTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>TrueTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>printTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Te6edf3&gt; Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>endTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>enteredTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>inputTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>enteredTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>!=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>dataTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>enteredTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>encodeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;utf-8Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>packetTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>PacketTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>dataTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>packetTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>sendTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>



Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>##########################################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>#### Program Startup #####################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>##########################################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># This part of the program gets run at startup,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># and parses input from the user, and then startsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># the program.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"vm"Tb4b4b4>__name__Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>==Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;__main__Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>tryTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>parserTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>argparseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>ArgumentParserTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>descriptionTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Reticulum example demonstrating sending and receiving broadcastsTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>parserTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>add_argumentTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;--configTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>actionTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;storeTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>defaultTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>NoneTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>helpTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;path to alternative Reticulum config directoryTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>typeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>strTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>parserTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>add_argumentTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;--channelTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>actionTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;storeTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>defaultTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>NoneTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>helpTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;broadcast channel nameTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>typeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>strTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>argsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>parserTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>parse_argsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>argsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configargTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>argsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>elseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configargTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>NoneTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>argsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>channelTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>channelargTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>argsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>channelTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>elseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>channelargTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>NoneTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>program_setupTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configargTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>channelargTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>exceptTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"ne"Tb4b4b4>KeyboardInterruptTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>printTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>exitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>This example can also be found at Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference external" Te6edf3hrefTff7b72=Ta5d6ff"https://github.com/markqvist/Reticulum/blob/master/Examples/Broadcast.py"Tb4b4b4>https://github.com/markqvist/Reticulum/blob/master/Examples/Broadcast.pyTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"section" Te6edf3idTff7b72=Ta5d6ff"echo"Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3idTff7b72=Ta5d6ff"example-echo"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72h2Tb4b4b4>EchoTb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"headerlink" Te6edf3hrefTff7b72=Ta5d6ff"#echo" Te6edf3titleTff7b72=Ta5d6ff"Permalink to this headline"Tb4b4b4>¶Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72h2Tb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>The Tb4b4b4<Tff7b72emTb4b4b4>EchoTb4b4b4<Tb4b4b4/Tff7b72emTb4b4b4> example demonstrates communication between two destinations using
the Packet interface.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-default notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>##########################################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># This RNS example demonstrates a simple client/server #Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># echo utility. A client can send an echo request to the #Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># server, and the server will respond by proving receipt #Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># of the packet. #Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>##########################################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kn"Tb4b4b4>importTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nn"Tb4b4b4>argparseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kn"Tb4b4b4>importTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nn"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># LetTe6edf3&#39;s define an app name. WeTe6edf3&#39;ll use this for allTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># destinations we create. Since this echo exampleTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># is part of a range of example utilities, weTe6edf3&#39;ll putTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># them all within the app namespace Te6edf3&quot;example_utilitiesTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>APP_NAMETb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;example_utilitiesTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>


Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>##########################################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>#### Server Part #########################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>##########################################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># This initialisation is executed when the users choosesTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># to run as a serverTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nf"Tb4b4b4>serverTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configpathTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># We must first initialise ReticulumTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>reticulumTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>ReticulumTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configpathTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># Randomly create a new identity for our echo serverTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_identityTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>IdentityTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># We create a destination that clients can query. We wantTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># to be able to verify echo replies to our clients, so weTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># create a Te6edf3&quot;singleTe6edf3&quot; destination that can receive encryptedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># messages. This way the client can send a request and beTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># certain that no-one else than this destination was ableTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># to read it. Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>echo_destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>DestinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_identityTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>DestinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>INTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>DestinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>SINGLETb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>APP_NAMETb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;echoTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;requestTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># We configure the destination to automatically prove allTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># packets adressed to it. By doing this, RNS will automaticallyTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># generate a proof for each incoming packet and transmit itTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># back to the sender of that packet.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>echo_destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>set_proof_strategyTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>DestinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>PROVE_ALLTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># Tell the destination which function in our program toTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># run when a packet is received. We do this so we canTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># print a log message when the server receives a requestTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>echo_destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>set_packet_callbackTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_callbackTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># EverythingTe6edf3&#39;s ready!Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># LetTe6edf3&#39;s Wait for client requests or user inputTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>announceLoopTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>echo_destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>


Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nf"Tb4b4b4>announceLoopTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># Let the user know that everything is readyTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Echo server Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>prettyhexrepTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>hashTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot; running, hit enter to manually send an announce (Ctrl-C to quit)Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># We enter a loop that runs until the users exits.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># If the user hits enter, we will announce our serverTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># destination on the network, which will let clientsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># know how to create messages directed towards it.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>whileTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>TrueTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>enteredTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>inputTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>announceTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Sent announce from Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>prettyhexrepTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>hashTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>))Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>


Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nf"Tb4b4b4>server_callbackTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>messageTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>packetTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># Tell the user that we received an echo request, andTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># that we are going to send a reply to the requester.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># Sending the proof is handled automatically, since weTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># set up the destination to prove all incoming packets.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Received packet from echo client, proof sentTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>


Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>##########################################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>#### Client Part #########################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>##########################################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># This initialisation is executed when the users choosesTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># to run as a clientTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nf"Tb4b4b4>clientTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destination_hexhashTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configpathTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>timeoutTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>NoneTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># We need a binary representation of the destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># hash that was entered on the command lineTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>tryTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>lenTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destination_hexhashTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>!=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"mi"Tb4b4b4>20Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>raiseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"ne"Tb4b4b4>ValueErrorTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Destination length is invalid, must be 20 hexadecimal characters (10 bytes)Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destination_hashTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>bytesTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>fromhexTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destination_hexhashTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>exceptTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Invalid destination entered. Check your input!Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"se"Tb4b4b4>\nTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>exitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># We must first initialise ReticulumTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>reticulumTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>ReticulumTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configpathTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># We override the loglevel to provide feedback whenTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># an announce is receivedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>loglevelTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>Te6edf3&lt;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>LOG_INFOTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>loglevelTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>LOG_INFOTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># Tell the user that the client is ready!Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Echo client ready, hit enter to send echo request to Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destination_hexhashTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot; (Ctrl-C to quit)Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># We enter a loop that runs until the user exits.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># If the user hits enter, we will try to send anTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># echo request to the destination specified on theTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># command line.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>whileTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>TrueTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>inputTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># LetTe6edf3&#39;s first check if RNS knows a path to the destination.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># If it does, weTe6edf3&#39;ll load the server identity and create a packetTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>TransportTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>has_pathTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destination_hashTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># To address the server, we need to know itTe6edf3&#39;s publicTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># key, so we check if Reticulum knows this destination.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># This is done by calling the Te6edf3&quot;recallTe6edf3&quot; method of theTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># Identity module. If the destination is known, it willTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># return an Identity instance that can be used inTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># outgoing destinations.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_identityTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>IdentityTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>recallTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destination_hashTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># We got the correct identity instance from theTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># recall method, so letTe6edf3&#39;s create an outgoingTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># destination. We use the naming convention:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># example_utilities.echo.requestTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># This matches the naming we specified in theTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># server part of the code.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>request_destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>DestinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_identityTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>DestinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>OUTTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>DestinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>SINGLETb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>APP_NAMETb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;echoTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;requestTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># The destination is ready, so letTe6edf3&#39;s create a packet.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># We set the destination to the request_destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># that was just created, and the only data we addTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># is a random hash.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>echo_requestTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>PacketTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>request_destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>IdentityTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>get_random_hashTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>())Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># Send the packet! If the packet is successfullyTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># sent, it will return a PacketReceipt instance.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>packet_receiptTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>echo_requestTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>sendTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># If the user specified a timeout, we set thisTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># timeout on the packet receipt, and configureTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># a callback function, that will get called ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># the packet times out.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>timeoutTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>!=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>NoneTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>packet_receiptTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>set_timeoutTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>timeoutTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>packet_receiptTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>set_timeout_callbackTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>packet_timed_outTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># We can then set a delivery callback on the receipt.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># This will get automatically called when a proof forTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># this specific packet is received from the destination.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>packet_receiptTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>set_delivery_callbackTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>packet_deliveredTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># Tell the user that the echo request was sentTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Sent echo request to Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>prettyhexrepTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>request_destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>hashTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>))Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>elseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># If we do not know this destination, tell theTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># user to wait for an announce to arrive.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Destination is not yet known. Requesting path...Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>TransportTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>request_pathTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destination_hashTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># This function is called when our reply destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># receives a proof packet.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nf"Tb4b4b4>packet_deliveredTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>receiptTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>receiptTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>statusTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>==Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>PacketReceiptTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>DELIVEREDTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>rttTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>receiptTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>get_rttTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>rttTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>Te6edf3&gt;=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"mi"Tb4b4b4>1Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>rttTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>roundTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>rttTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"mi"Tb4b4b4>3Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>rttstringTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>strTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>rttTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot; secondsTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>elseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>rttTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>roundTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>rttTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>*Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"mi"Tb4b4b4>1000Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"mi"Tb4b4b4>3Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>rttstringTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>strTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>rttTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot; millisecondsTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Valid reply received from Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>prettyhexrepTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>receiptTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>hashTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;, round-trip time is Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>rttstringTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># This function is called if a packet times out.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nf"Tb4b4b4>packet_timed_outTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>receiptTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>receiptTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>statusTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>==Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>PacketReceiptTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>FAILEDTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Packet Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>prettyhexrepTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>receiptTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>hashTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot; timed outTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>


Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>##########################################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>#### Program Startup #####################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>##########################################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># This part of the program gets run at startup,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># and parses input from the user, and then startsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># the desired program mode.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"vm"Tb4b4b4>__name__Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>==Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;__main__Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>tryTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>parserTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>argparseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>ArgumentParserTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>descriptionTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Simple echo server and client utilityTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>parserTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>add_argumentTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;-sTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;--serverTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>actionTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;store_trueTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>helpTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;wait for incoming packets from clientsTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>parserTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>add_argumentTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;-tTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;--timeoutTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>actionTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;storeTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>metavarTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;sTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>defaultTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>NoneTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>helpTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;set a reply timeout in secondsTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>typeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>floatTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>parserTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>add_argumentTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;--configTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>actionTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;storeTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>defaultTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>NoneTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>helpTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;path to alternative Reticulum config directoryTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>typeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>strTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>parserTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>add_argumentTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;destinationTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>nargsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;?Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>defaultTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>NoneTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>helpTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;hexadecimal hash of the server destinationTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>typeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>strTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>argsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>parserTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>parse_argsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>argsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>serverTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configargTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>NoneTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>argsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configargTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>argsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>serverTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configargTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>elseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>argsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configargTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>argsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>elseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configargTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>NoneTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>argsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>timeoutTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>timeoutargTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>floatTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>argsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>timeoutTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>elseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>timeoutargTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>NoneTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>argsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>==Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>NoneTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>printTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>parserTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>print_helpTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>printTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>elseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>clientTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>argsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configargTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>timeoutTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>timeoutargTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>exceptTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"ne"Tb4b4b4>KeyboardInterruptTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>printTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>exitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>This example can also be found at Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference external" Te6edf3hrefTff7b72=Ta5d6ff"https://github.com/markqvist/Reticulum/blob/master/Examples/Echo.py"Tb4b4b4>https://github.com/markqvist/Reticulum/blob/master/Examples/Echo.pyTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"section" Te6edf3idTff7b72=Ta5d6ff"link"Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3idTff7b72=Ta5d6ff"example-link"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72h2Tb4b4b4>LinkTb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"headerlink" Te6edf3hrefTff7b72=Ta5d6ff"#link" Te6edf3titleTff7b72=Ta5d6ff"Permalink to this headline"Tb4b4b4>¶Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72h2Tb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>The Tb4b4b4<Tff7b72emTb4b4b4>LinkTb4b4b4<Tb4b4b4/Tff7b72emTb4b4b4> example explores establishing an encrypted link to a remote
destination, and passing traffic back and forth over the link.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-default notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>##########################################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># This RNS example demonstrates how to set up a link to #Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># a destination, and pass data back and forth over it. #Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>##########################################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kn"Tb4b4b4>importTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nn"Tb4b4b4>osTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kn"Tb4b4b4>importTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nn"Tb4b4b4>sysTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kn"Tb4b4b4>importTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nn"Tb4b4b4>timeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kn"Tb4b4b4>importTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nn"Tb4b4b4>argparseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kn"Tb4b4b4>importTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nn"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># LetTe6edf3&#39;s define an app name. WeTe6edf3&#39;ll use this for allTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># destinations we create. Since this echo exampleTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># is part of a range of example utilities, weTe6edf3&#39;ll putTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># them all within the app namespace Te6edf3&quot;example_utilitiesTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>APP_NAMETb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;example_utilitiesTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>##########################################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>#### Server Part #########################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>##########################################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># A reference to the latest client link that connectedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>latest_client_linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>NoneTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># This initialisation is executed when the users choosesTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># to run as a serverTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nf"Tb4b4b4>serverTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configpathTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># We must first initialise ReticulumTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>reticulumTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>ReticulumTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configpathTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># Randomly create a new identity for our link exampleTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_identityTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>IdentityTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># We create a destination that clients can connect to. WeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># want clients to create links to this destination, so weTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># need to create a Te6edf3&quot;singleTe6edf3&quot; destination type.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>DestinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_identityTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>DestinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>INTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>DestinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>SINGLETb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>APP_NAMETb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;linkexampleTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># We configure a function that will get called every timeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># a new client creates a link to this destination.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>set_link_established_callbackTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>client_connectedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># EverythingTe6edf3&#39;s ready!Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># LetTe6edf3&#39;s Wait for client requests or user inputTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_loopTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nf"Tb4b4b4>server_loopTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># Let the user know that everything is readyTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Link example Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>prettyhexrepTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>hashTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot; running, waiting for a connection.Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Hit enter to manually send an announce (Ctrl-C to quit)Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># We enter a loop that runs until the users exits.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># If the user hits enter, we will announce our serverTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># destination on the network, which will let clientsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># know how to create messages directed towards it.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>whileTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>TrueTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>enteredTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>inputTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>announceTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Sent announce from Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>prettyhexrepTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>hashTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>))Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># When a client establishes a link to our serverTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># destination, this function will be called withTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># a reference to the link.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nf"Tb4b4b4>client_connectedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>globalTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>latest_client_linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Client connectedTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>set_link_closed_callbackTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>client_disconnectedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>set_packet_callbackTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_packet_receivedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>latest_client_linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nf"Tb4b4b4>client_disconnectedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Client disconnectedTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nf"Tb4b4b4>server_packet_receivedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>messageTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>packetTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>globalTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>latest_client_linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># When data is received over any active link,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># it will all be directed to the last clientTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># that connected.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>textTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>messageTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>decodeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;utf-8Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Received data on the link: Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>textTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>reply_textTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;I received Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"se"Tb4b4b4>\Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>textTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"se"Tb4b4b4>\Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4> over the linkTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>reply_dataTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>reply_textTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>encodeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;utf-8Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>PacketTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>latest_client_linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>reply_dataTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>sendTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>


Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>##########################################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>#### Client Part #########################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>##########################################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># A reference to the server linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>NoneTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># This initialisation is executed when the users choosesTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># to run as a clientTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nf"Tb4b4b4>clientTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destination_hexhashTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configpathTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># We need a binary representation of the destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># hash that was entered on the command lineTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>tryTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>lenTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destination_hexhashTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>!=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"mi"Tb4b4b4>20Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>raiseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"ne"Tb4b4b4>ValueErrorTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Destination length is invalid, must be 20 hexadecimal characters (10 bytes)Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destination_hashTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>bytesTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>fromhexTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destination_hexhashTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>exceptTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Invalid destination entered. Check your input!Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"se"Tb4b4b4>\nTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>exitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># We must first initialise ReticulumTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>reticulumTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>ReticulumTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configpathTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># Check if we know a path to the destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"ow"Tb4b4b4>notTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>TransportTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>has_pathTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destination_hashTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Destination is not yet known. Requesting path and waiting for announce to arrive...Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>TransportTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>request_pathTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destination_hashTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>whileTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"ow"Tb4b4b4>notTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>TransportTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>has_pathTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destination_hashTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>timeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>sleepTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"mf"Tb4b4b4>0.1Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># Recall the server identityTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_identityTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>IdentityTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>recallTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destination_hashTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># Inform the user that weTe6edf3&#39;ll begin connectingTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Establishing link with server...Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># When the server identity is known, we setTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># up a destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>DestinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_identityTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>DestinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>OUTTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>DestinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>SINGLETb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>APP_NAMETb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;linkexampleTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># And create a linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>LinkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># We set a callback that will get executedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># every time a packet is received over theTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>set_packet_callbackTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>client_packet_receivedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># WeTe6edf3&#39;ll also set up functions to inform theTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># user when the link is established or closedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>set_link_established_callbackTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>link_establishedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>set_link_closed_callbackTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>link_closedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># Everything is set up, so letTe6edf3&#39;s enter a loopTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># for the user to interact with the exampleTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>client_loopTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nf"Tb4b4b4>client_loopTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>():Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>globalTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># Wait for the link to become activeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>whileTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"ow"Tb4b4b4>notTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>timeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>sleepTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"mf"Tb4b4b4>0.1Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>should_quitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>FalseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>whileTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"ow"Tb4b4b4>notTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>should_quitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>tryTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>printTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Te6edf3&gt; Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>endTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot; Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>textTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>inputTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># Check if we should quit the exampleTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>textTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>==Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;quitTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"ow"Tb4b4b4>orTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>textTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>==Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;qTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"ow"Tb4b4b4>orTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>textTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>==Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;exitTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>should_quitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>TrueTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>teardownTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># If not, send the entered text over the linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>textTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>!=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>dataTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>textTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>encodeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;utf-8Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>lenTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>dataTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>Te6edf3&lt;=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>LinkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>MDUTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>PacketTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>dataTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>sendTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>elseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Cannot send this packet, the data size of Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>strTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>lenTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>dataTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>))Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot; bytes exceeds the link packet MDU of Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>strTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>LinkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>MDUTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot; bytesTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>LOG_ERRORTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>exceptTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"ne"Tb4b4b4>ExceptionTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>asTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>eTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Error while sending data over the link: Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>strTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>eTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>))Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>should_quitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>TrueTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>teardownTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># This function is called when a linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># has been established with the serverTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nf"Tb4b4b4>link_establishedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># We store a reference to the linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># instance for later useTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>globalTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># Inform the user that the server isTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># connectedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Link established with server, enter some text to send, or Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"se"Tb4b4b4>\Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>quitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"se"Tb4b4b4>\Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4> to quitTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># When a link is closed, weTe6edf3&#39;ll inform theTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># user, and exit the programTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nf"Tb4b4b4>link_closedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>teardown_reasonTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>==Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>LinkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>TIMEOUTTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;The link timed out, exiting nowTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>elifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>teardown_reasonTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>==Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>LinkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>DESTINATION_CLOSEDTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;The link was closed by the server, exiting nowTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>elseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Link closed, exiting nowTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>ReticulumTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>exit_handlerTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>timeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>sleepTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"mf"Tb4b4b4>1.5Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>osTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>_exitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"mi"Tb4b4b4>0Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># When a packet is received over the link, weTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># simply print out the data.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nf"Tb4b4b4>client_packet_receivedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>messageTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>packetTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>textTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>messageTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>decodeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;utf-8Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Received data on the link: Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>textTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>printTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Te6edf3&gt; Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>endTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot; Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>sysTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>stdoutTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>flushTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>


Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>##########################################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>#### Program Startup #####################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>##########################################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># This part of the program runs at startup,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># and parses input of from the user, and thenTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># starts up the desired program mode.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"vm"Tb4b4b4>__name__Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>==Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;__main__Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>tryTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>parserTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>argparseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>ArgumentParserTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>descriptionTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Simple link exampleTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>parserTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>add_argumentTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;-sTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;--serverTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>actionTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;store_trueTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>helpTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;wait for incoming link requests from clientsTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>parserTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>add_argumentTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;--configTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>actionTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;storeTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>defaultTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>NoneTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>helpTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;path to alternative Reticulum config directoryTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>typeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>strTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>parserTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>add_argumentTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;destinationTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>nargsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;?Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>defaultTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>NoneTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>helpTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;hexadecimal hash of the server destinationTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>typeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>strTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>argsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>parserTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>parse_argsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>argsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configargTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>argsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>elseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configargTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>NoneTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>argsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>serverTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>serverTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configargTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>elseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>argsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>==Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>NoneTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>printTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>parserTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>print_helpTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>printTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>elseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>clientTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>argsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configargTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>exceptTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"ne"Tb4b4b4>KeyboardInterruptTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>printTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>exitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>This example can also be found at Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference external" Te6edf3hrefTff7b72=Ta5d6ff"https://github.com/markqvist/Reticulum/blob/master/Examples/Link.py"Tb4b4b4>https://github.com/markqvist/Reticulum/blob/master/Examples/Link.pyTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"section" Te6edf3idTff7b72=Ta5d6ff"example-identify"Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3idTff7b72=Ta5d6ff"identification"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72h2Tb4b4b4>IdentificationTb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"headerlink" Te6edf3hrefTff7b72=Ta5d6ff"#example-identify" Te6edf3titleTff7b72=Ta5d6ff"Permalink to this headline"Tb4b4b4>¶Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72h2Tb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>The Tb4b4b4<Tff7b72emTb4b4b4>IdentifyTb4b4b4<Tb4b4b4/Tff7b72emTb4b4b4> example explores identifying an intiator of a link, once
the link has been established.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-default notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>##########################################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># This RNS example demonstrates how to set up a link to #Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># a destination, and identify the initiator to itTe6edf3&#39;s peer #Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>##########################################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kn"Tb4b4b4>importTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nn"Tb4b4b4>osTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kn"Tb4b4b4>importTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nn"Tb4b4b4>sysTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kn"Tb4b4b4>importTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nn"Tb4b4b4>timeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kn"Tb4b4b4>importTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nn"Tb4b4b4>argparseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kn"Tb4b4b4>importTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nn"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># LetTe6edf3&#39;s define an app name. WeTe6edf3&#39;ll use this for allTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># destinations we create. Since this echo exampleTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># is part of a range of example utilities, weTe6edf3&#39;ll putTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># them all within the app namespace Te6edf3&quot;example_utilitiesTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>APP_NAMETb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;example_utilitiesTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>##########################################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>#### Server Part #########################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>##########################################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># A reference to the latest client link that connectedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>latest_client_linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>NoneTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># This initialisation is executed when the users choosesTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># to run as a serverTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nf"Tb4b4b4>serverTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configpathTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># We must first initialise ReticulumTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>reticulumTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>ReticulumTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configpathTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># Randomly create a new identity for our link exampleTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_identityTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>IdentityTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># We create a destination that clients can connect to. WeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># want clients to create links to this destination, so weTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># need to create a Te6edf3&quot;singleTe6edf3&quot; destination type.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>DestinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_identityTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>DestinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>INTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>DestinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>SINGLETb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>APP_NAMETb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;identifyexampleTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># We configure a function that will get called every timeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># a new client creates a link to this destination.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>set_link_established_callbackTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>client_connectedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># EverythingTe6edf3&#39;s ready!Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># LetTe6edf3&#39;s Wait for client requests or user inputTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_loopTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nf"Tb4b4b4>server_loopTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># Let the user know that everything is readyTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Link identification example Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>prettyhexrepTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>hashTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot; running, waiting for a connection.Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Hit enter to manually send an announce (Ctrl-C to quit)Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># We enter a loop that runs until the users exits.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># If the user hits enter, we will announce our serverTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># destination on the network, which will let clientsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># know how to create messages directed towards it.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>whileTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>TrueTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>enteredTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>inputTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>announceTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Sent announce from Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>prettyhexrepTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>hashTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>))Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># When a client establishes a link to our serverTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># destination, this function will be called withTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># a reference to the link.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nf"Tb4b4b4>client_connectedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>globalTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>latest_client_linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Client connectedTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>set_link_closed_callbackTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>client_disconnectedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>set_packet_callbackTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_packet_receivedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>set_remote_identified_callbackTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>remote_identifiedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>latest_client_linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nf"Tb4b4b4>client_disconnectedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Client disconnectedTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nf"Tb4b4b4>remote_identifiedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>identityTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Remote identified as: Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>strTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>identityTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>))Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nf"Tb4b4b4>server_packet_receivedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>messageTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>packetTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>globalTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>latest_client_linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># Get the originating identity for displayTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>remote_peerTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;unidentified peerTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>packetTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>get_remote_identityTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>!=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>NoneTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>remote_peerTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>strTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>packetTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>get_remote_identityTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>())Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># When data is received over any active link,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># it will all be directed to the last clientTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># that connected.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>textTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>messageTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>decodeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;utf-8Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Received data from Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>remote_peerTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;: Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>textTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>reply_textTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;I received Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"se"Tb4b4b4>\Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>textTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"se"Tb4b4b4>\Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4> over the link from Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>remote_peerTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>reply_dataTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>reply_textTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>encodeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;utf-8Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>PacketTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>latest_client_linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>reply_dataTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>sendTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>


Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>##########################################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>#### Client Part #########################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>##########################################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># A reference to the server linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>NoneTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># A reference to the client identityTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>client_identityTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>NoneTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># This initialisation is executed when the users choosesTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># to run as a clientTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nf"Tb4b4b4>clientTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destination_hexhashTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configpathTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>globalTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>client_identityTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># We need a binary representation of the destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># hash that was entered on the command lineTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>tryTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>lenTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destination_hexhashTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>!=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"mi"Tb4b4b4>20Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>raiseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"ne"Tb4b4b4>ValueErrorTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Destination length is invalid, must be 20 hexadecimal characters (10 bytes)Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destination_hashTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>bytesTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>fromhexTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destination_hexhashTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>exceptTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Invalid destination entered. Check your input!Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"se"Tb4b4b4>\nTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>exitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># We must first initialise ReticulumTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>reticulumTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>ReticulumTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configpathTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># Create a new client identityTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>client_identityTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>IdentityTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Client created new identity Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>strTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>client_identityTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># Check if we know a path to the destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"ow"Tb4b4b4>notTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>TransportTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>has_pathTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destination_hashTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Destination is not yet known. Requesting path and waiting for announce to arrive...Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>TransportTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>request_pathTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destination_hashTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>whileTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"ow"Tb4b4b4>notTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>TransportTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>has_pathTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destination_hashTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>timeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>sleepTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"mf"Tb4b4b4>0.1Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># Recall the server identityTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_identityTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>IdentityTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>recallTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destination_hashTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># Inform the user that weTe6edf3&#39;ll begin connectingTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Establishing link with server...Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># When the server identity is known, we setTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># up a destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>DestinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_identityTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>DestinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>OUTTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>DestinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>SINGLETb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>APP_NAMETb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;identifyexampleTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># And create a linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>LinkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># We set a callback that will get executedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># every time a packet is received over theTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>set_packet_callbackTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>client_packet_receivedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># WeTe6edf3&#39;ll also set up functions to inform theTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># user when the link is established or closedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>set_link_established_callbackTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>link_establishedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>set_link_closed_callbackTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>link_closedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># Everything is set up, so letTe6edf3&#39;s enter a loopTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># for the user to interact with the exampleTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>client_loopTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nf"Tb4b4b4>client_loopTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>():Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>globalTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># Wait for the link to become activeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>whileTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"ow"Tb4b4b4>notTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>timeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>sleepTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"mf"Tb4b4b4>0.1Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>should_quitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>FalseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>whileTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"ow"Tb4b4b4>notTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>should_quitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>tryTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>printTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Te6edf3&gt; Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>endTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot; Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>textTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>inputTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># Check if we should quit the exampleTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>textTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>==Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;quitTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"ow"Tb4b4b4>orTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>textTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>==Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;qTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"ow"Tb4b4b4>orTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>textTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>==Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;exitTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>should_quitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>TrueTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>teardownTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># If not, send the entered text over the linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>textTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>!=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>dataTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>textTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>encodeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;utf-8Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>lenTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>dataTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>Te6edf3&lt;=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>LinkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>MDUTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>PacketTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>dataTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>sendTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>elseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Cannot send this packet, the data size of Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>strTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>lenTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>dataTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>))Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot; bytes exceeds the link packet MDU of Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>strTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>LinkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>MDUTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot; bytesTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>LOG_ERRORTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>exceptTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"ne"Tb4b4b4>ExceptionTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>asTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>eTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Error while sending data over the link: Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>strTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>eTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>))Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>should_quitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>TrueTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>teardownTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># This function is called when a linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># has been established with the serverTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nf"Tb4b4b4>link_establishedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># We store a reference to the linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># instance for later useTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>globalTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>client_identityTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># Inform the user that the server isTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># connectedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Link established with server, identifying to remote peer...Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>identifyTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>client_identityTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># When a link is closed, weTe6edf3&#39;ll inform theTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># user, and exit the programTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nf"Tb4b4b4>link_closedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>teardown_reasonTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>==Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>LinkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>TIMEOUTTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;The link timed out, exiting nowTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>elifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>teardown_reasonTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>==Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>LinkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>DESTINATION_CLOSEDTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;The link was closed by the server, exiting nowTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>elseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Link closed, exiting nowTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>ReticulumTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>exit_handlerTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>timeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>sleepTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"mf"Tb4b4b4>1.5Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>osTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>_exitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"mi"Tb4b4b4>0Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># When a packet is received over the link, weTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># simply print out the data.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nf"Tb4b4b4>client_packet_receivedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>messageTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>packetTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>textTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>messageTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>decodeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;utf-8Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Received data on the link: Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>textTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>printTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Te6edf3&gt; Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>endTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot; Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>sysTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>stdoutTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>flushTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>


Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>##########################################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>#### Program Startup #####################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>##########################################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># This part of the program runs at startup,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># and parses input of from the user, and thenTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># starts up the desired program mode.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"vm"Tb4b4b4>__name__Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>==Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;__main__Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>tryTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>parserTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>argparseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>ArgumentParserTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>descriptionTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Simple link exampleTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>parserTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>add_argumentTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;-sTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;--serverTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>actionTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;store_trueTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>helpTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;wait for incoming link requests from clientsTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>parserTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>add_argumentTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;--configTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>actionTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;storeTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>defaultTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>NoneTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>helpTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;path to alternative Reticulum config directoryTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>typeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>strTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>parserTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>add_argumentTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;destinationTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>nargsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;?Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>defaultTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>NoneTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>helpTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;hexadecimal hash of the server destinationTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>typeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>strTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>argsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>parserTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>parse_argsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>argsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configargTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>argsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>elseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configargTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>NoneTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>argsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>serverTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>serverTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configargTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>elseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>argsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>==Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>NoneTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>printTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>parserTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>print_helpTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>printTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>elseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>clientTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>argsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configargTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>exceptTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"ne"Tb4b4b4>KeyboardInterruptTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>printTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>exitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>This example can also be found at Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference external" Te6edf3hrefTff7b72=Ta5d6ff"https://github.com/markqvist/Reticulum/blob/master/Examples/Identify.py"Tb4b4b4>https://github.com/markqvist/Reticulum/blob/master/Examples/Identify.pyTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"section" Te6edf3idTff7b72=Ta5d6ff"requests-responses"Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3idTff7b72=Ta5d6ff"example-request"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72h2Tb4b4b4>Requests Te6edf3&amp; ResponsesTb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"headerlink" Te6edf3hrefTff7b72=Ta5d6ff"#requests-responses" Te6edf3titleTff7b72=Ta5d6ff"Permalink to this headline"Tb4b4b4>¶Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72h2Tb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>The Tb4b4b4<Tff7b72emTb4b4b4>RequestTb4b4b4<Tb4b4b4/Tff7b72emTb4b4b4> example explores sendig requests and receiving responses.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-default notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>##########################################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># This RNS example demonstrates how to set perform #Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># requests and receive responses over a link. #Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>##########################################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kn"Tb4b4b4>importTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nn"Tb4b4b4>osTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kn"Tb4b4b4>importTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nn"Tb4b4b4>sysTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kn"Tb4b4b4>importTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nn"Tb4b4b4>timeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kn"Tb4b4b4>importTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nn"Tb4b4b4>randomTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kn"Tb4b4b4>importTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nn"Tb4b4b4>argparseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kn"Tb4b4b4>importTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nn"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># LetTe6edf3&#39;s define an app name. WeTe6edf3&#39;ll use this for allTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># destinations we create. Since this echo exampleTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># is part of a range of example utilities, weTe6edf3&#39;ll putTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># them all within the app namespace Te6edf3&quot;example_utilitiesTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>APP_NAMETb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;example_utilitiesTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>##########################################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>#### Server Part #########################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>##########################################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># A reference to the latest client link that connectedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>latest_client_linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>NoneTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nf"Tb4b4b4>random_text_generatorTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>pathTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>dataTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>request_idTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>remote_identityTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>requested_atTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Generating response to request Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>prettyhexrepTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>request_idTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>))Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>textsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>[Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;They looked upTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;On each full moonTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Becky was upsetTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;I’ll stay away from itTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;The pet shop stocks everythingTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>]Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>returnTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>textsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>[Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>randomTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>randintTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"mi"Tb4b4b4>0Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>lenTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>textsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>-Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"mi"Tb4b4b4>1Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)]Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># This initialisation is executed when the users choosesTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># to run as a serverTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nf"Tb4b4b4>serverTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configpathTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># We must first initialise ReticulumTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>reticulumTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>ReticulumTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configpathTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># Randomly create a new identity for our link exampleTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_identityTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>IdentityTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># We create a destination that clients can connect to. WeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># want clients to create links to this destination, so weTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># need to create a Te6edf3&quot;singleTe6edf3&quot; destination type.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>DestinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_identityTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>DestinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>INTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>DestinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>SINGLETb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>APP_NAMETb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;requestexampleTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># We configure a function that will get called every timeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># a new client creates a link to this destination.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>set_link_established_callbackTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>client_connectedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># We register a request handler for handling incomingTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># requests over any established links.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>register_request_handlerTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;/random/textTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>response_generatorTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>random_text_generatorTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>allowTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>DestinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>ALLOW_ALLTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># EverythingTe6edf3&#39;s ready!Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># LetTe6edf3&#39;s Wait for client requests or user inputTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_loopTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nf"Tb4b4b4>server_loopTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># Let the user know that everything is readyTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Request example Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>prettyhexrepTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>hashTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot; running, waiting for a connection.Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Hit enter to manually send an announce (Ctrl-C to quit)Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># We enter a loop that runs until the users exits.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># If the user hits enter, we will announce our serverTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># destination on the network, which will let clientsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># know how to create messages directed towards it.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>whileTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>TrueTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>enteredTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>inputTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>announceTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Sent announce from Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>prettyhexrepTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>hashTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>))Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># When a client establishes a link to our serverTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># destination, this function will be called withTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># a reference to the link.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nf"Tb4b4b4>client_connectedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>globalTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>latest_client_linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Client connectedTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>set_link_closed_callbackTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>client_disconnectedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>latest_client_linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nf"Tb4b4b4>client_disconnectedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Client disconnectedTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>


Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>##########################################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>#### Client Part #########################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>##########################################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># A reference to the server linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>NoneTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># This initialisation is executed when the users choosesTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># to run as a clientTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nf"Tb4b4b4>clientTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destination_hexhashTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configpathTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># We need a binary representation of the destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># hash that was entered on the command lineTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>tryTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>lenTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destination_hexhashTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>!=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"mi"Tb4b4b4>20Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>raiseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"ne"Tb4b4b4>ValueErrorTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Destination length is invalid, must be 20 hexadecimal characters (10 bytes)Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destination_hashTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>bytesTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>fromhexTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destination_hexhashTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>exceptTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Invalid destination entered. Check your input!Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"se"Tb4b4b4>\nTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>exitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># We must first initialise ReticulumTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>reticulumTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>ReticulumTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configpathTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># Check if we know a path to the destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"ow"Tb4b4b4>notTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>TransportTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>has_pathTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destination_hashTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Destination is not yet known. Requesting path and waiting for announce to arrive...Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>TransportTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>request_pathTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destination_hashTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>whileTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"ow"Tb4b4b4>notTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>TransportTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>has_pathTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destination_hashTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>timeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>sleepTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"mf"Tb4b4b4>0.1Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># Recall the server identityTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_identityTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>IdentityTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>recallTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destination_hashTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># Inform the user that weTe6edf3&#39;ll begin connectingTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Establishing link with server...Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># When the server identity is known, we setTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># up a destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>DestinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_identityTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>DestinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>OUTTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>DestinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>SINGLETb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>APP_NAMETb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;requestexampleTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># And create a linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>LinkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># WeTe6edf3&#39;ll set up functions to inform theTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># user when the link is established or closedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>set_link_established_callbackTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>link_establishedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>set_link_closed_callbackTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>link_closedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># Everything is set up, so letTe6edf3&#39;s enter a loopTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># for the user to interact with the exampleTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>client_loopTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nf"Tb4b4b4>client_loopTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>():Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>globalTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># Wait for the link to become activeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>whileTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"ow"Tb4b4b4>notTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>timeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>sleepTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"mf"Tb4b4b4>0.1Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>should_quitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>FalseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>whileTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"ow"Tb4b4b4>notTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>should_quitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>tryTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>printTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Te6edf3&gt; Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>endTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot; Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>textTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>inputTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># Check if we should quit the exampleTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>textTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>==Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;quitTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"ow"Tb4b4b4>orTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>textTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>==Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;qTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"ow"Tb4b4b4>orTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>textTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>==Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;exitTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>should_quitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>TrueTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>teardownTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>elseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>requestTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;/random/textTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>dataTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>NoneTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>response_callbackTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>got_responseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>failed_callbackTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>request_failedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>


Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>exceptTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"ne"Tb4b4b4>ExceptionTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>asTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>eTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Error while sending request over the link: Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>strTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>eTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>))Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>should_quitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>TrueTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>teardownTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nf"Tb4b4b4>got_responseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>request_receiptTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>request_idTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>request_receiptTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>request_idTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>responseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>request_receiptTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>responseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Got response for request Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>prettyhexrepTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>request_idTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;: Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>strTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>responseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>))Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nf"Tb4b4b4>request_receivedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>request_receiptTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;The request Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>prettyhexrepTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>request_receiptTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>request_idTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot; was received by the remote peer.Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nf"Tb4b4b4>request_failedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>request_receiptTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;The request Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>prettyhexrepTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>request_receiptTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>request_idTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot; failed.Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>


Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># This function is called when a linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># has been established with the serverTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nf"Tb4b4b4>link_establishedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># We store a reference to the linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># instance for later useTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>globalTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># Inform the user that the server isTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># connectedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Link established with server, hit enter to perform a request, or type in Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"se"Tb4b4b4>\Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>quitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"se"Tb4b4b4>\Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4> to quitTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># When a link is closed, weTe6edf3&#39;ll inform theTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># user, and exit the programTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nf"Tb4b4b4>link_closedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>teardown_reasonTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>==Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>LinkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>TIMEOUTTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;The link timed out, exiting nowTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>elifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>teardown_reasonTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>==Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>LinkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>DESTINATION_CLOSEDTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;The link was closed by the server, exiting nowTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>elseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Link closed, exiting nowTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>ReticulumTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>exit_handlerTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>timeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>sleepTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"mf"Tb4b4b4>1.5Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>osTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>_exitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"mi"Tb4b4b4>0Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>


Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>##########################################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>#### Program Startup #####################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>##########################################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># This part of the program runs at startup,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># and parses input of from the user, and thenTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># starts up the desired program mode.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"vm"Tb4b4b4>__name__Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>==Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;__main__Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>tryTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>parserTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>argparseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>ArgumentParserTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>descriptionTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Simple request/response exampleTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>parserTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>add_argumentTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;-sTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;--serverTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>actionTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;store_trueTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>helpTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;wait for incoming requests from clientsTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>parserTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>add_argumentTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;--configTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>actionTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;storeTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>defaultTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>NoneTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>helpTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;path to alternative Reticulum config directoryTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>typeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>strTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>parserTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>add_argumentTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;destinationTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>nargsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;?Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>defaultTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>NoneTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>helpTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;hexadecimal hash of the server destinationTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>typeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>strTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>argsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>parserTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>parse_argsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>argsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configargTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>argsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>elseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configargTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>NoneTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>argsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>serverTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>serverTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configargTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>elseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>argsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>==Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>NoneTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>printTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>parserTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>print_helpTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>printTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>elseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>clientTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>argsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configargTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>exceptTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"ne"Tb4b4b4>KeyboardInterruptTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>printTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>exitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>This example can also be found at Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference external" Te6edf3hrefTff7b72=Ta5d6ff"https://github.com/markqvist/Reticulum/blob/master/Examples/Request.py"Tb4b4b4>https://github.com/markqvist/Reticulum/blob/master/Examples/Request.pyTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"section" Te6edf3idTff7b72=Ta5d6ff"filetransfer"Tb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3idTff7b72=Ta5d6ff"example-filetransfer"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72h2Tb4b4b4>FiletransferTb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"headerlink" Te6edf3hrefTff7b72=Ta5d6ff"#filetransfer" Te6edf3titleTff7b72=Ta5d6ff"Permalink to this headline"Tb4b4b4>¶Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72h2Tb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>The Tb4b4b4<Tff7b72emTb4b4b4>FiletransferTb4b4b4<Tb4b4b4/Tff7b72emTb4b4b4> example implements a basic file-server program that
allow clients to connect and download files. The program uses the Resource
interface to efficiently pass files of any size over a Reticulum Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"reference.html#api-link"Tb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"std std-ref"Tb4b4b4>LinkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight-default notranslate"Tb4b4b4>Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"highlight"Tb4b4b4>Tb4b4b4<Tff7b72preTb4b4b4>Tb4b4b4<Tff7b72spanTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>##########################################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># This RNS example demonstrates a simple filetransfer #Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># server and client program. The server will serve a #Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># directory of files, and the clients can list and #Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># download files from the server. #Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># #Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># Please note that using RNS Resources for large file #Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># transfers is not recommended, since compression, #Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># encryption and hashmap sequencing can take a long time #Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># on systems with slow CPUs, which will probably result #Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># in the client timing out before the resource sender #Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># can complete preparing the resource. #Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># #Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># If you need to transfer large files, use the Bundle #Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># class instead, which will automatically slice the data #Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># into chunks suitable for packing as a Resource. #Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>##########################################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kn"Tb4b4b4>importTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nn"Tb4b4b4>osTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kn"Tb4b4b4>importTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nn"Tb4b4b4>sysTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kn"Tb4b4b4>importTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nn"Tb4b4b4>timeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kn"Tb4b4b4>importTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nn"Tb4b4b4>threadingTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kn"Tb4b4b4>importTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nn"Tb4b4b4>argparseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kn"Tb4b4b4>importTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nn"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kn"Tb4b4b4>importTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nn"Tb4b4b4>RNS.vendor.umsgpackTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>asTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nn"Tb4b4b4>umsgpackTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># LetTe6edf3&#39;s define an app name. WeTe6edf3&#39;ll use this for allTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># destinations we create. Since this echo exampleTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># is part of a range of example utilities, weTe6edf3&#39;ll putTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># them all within the app namespace Te6edf3&quot;example_utilitiesTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>APP_NAMETb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;example_utilitiesTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># WeTe6edf3&#39;ll also define a default timeout, in secondsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>APP_TIMEOUTTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"mf"Tb4b4b4>45.0Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>##########################################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>#### Server Part #########################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>##########################################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>serve_pathTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>NoneTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># This initialisation is executed when the users choosesTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># to run as a serverTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nf"Tb4b4b4>serverTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configpathTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>pathTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># We must first initialise ReticulumTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>reticulumTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>ReticulumTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configpathTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># Randomly create a new identity for our file serverTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_identityTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>IdentityTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>globalTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>serve_pathTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>serve_pathTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>pathTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># We create a destination that clients can connect to. WeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># want clients to create links to this destination, so weTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># need to create a Te6edf3&quot;singleTe6edf3&quot; destination type.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>DestinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_identityTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>DestinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>INTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>DestinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>SINGLETb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>APP_NAMETb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;filetransferTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;serverTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># We configure a function that will get called every timeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># a new client creates a link to this destination.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>set_link_established_callbackTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>client_connectedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># EverythingTe6edf3&#39;s ready!Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># LetTe6edf3&#39;s Wait for client requests or user inputTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>announceLoopTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nf"Tb4b4b4>announceLoopTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># Let the user know that everything is readyTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;File server Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>prettyhexrepTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>hashTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot; runningTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Hit enter to manually send an announce (Ctrl-C to quit)Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># We enter a loop that runs until the users exits.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># If the user hits enter, we will announce our serverTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># destination on the network, which will let clientsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># know how to create messages directed towards it.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>whileTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>TrueTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>enteredTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>inputTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>announceTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Sent announce from Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>prettyhexrepTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>hashTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>))Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># HereTe6edf3&#39;s a convenience function for listing all filesTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># in our served directoryTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nf"Tb4b4b4>list_filesTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>():Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># We add all entries from the directory that areTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># actual files, and does not start with Te6edf3&quot;.Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>globalTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>serve_pathTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>returnTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>[Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>fileTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>forTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>fileTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"ow"Tb4b4b4>inTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>osTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>listdirTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>serve_pathTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>osTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>pathTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>isfileTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>osTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>pathTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>joinTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>serve_pathTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>fileTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>))Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"ow"Tb4b4b4>andTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>fileTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>[:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"mi"Tb4b4b4>1Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>]Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>!=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;.Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>]Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># When a client establishes a link to our serverTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># destination, this function will be called withTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># a reference to the link. We then send the clientTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># a list of files hosted on the server.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nf"Tb4b4b4>client_connectedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># Check if the served directory still existsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>osTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>pathTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>isdirTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>serve_pathTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Client connected, sending file list...Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>set_link_closed_callbackTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>client_disconnectedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># We pack a list of files for sending in a packetTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>dataTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>umsgpackTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>packbTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>list_filesTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>())Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># Check the size of the packed dataTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>lenTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>dataTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>Te6edf3&lt;=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>LinkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>MDUTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># If it fits in one packet, we will justTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># send it as a single packet over the link.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>list_packetTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>PacketTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>dataTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>list_receiptTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>list_packetTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>sendTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>list_receiptTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>set_timeoutTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>APP_TIMEOUTTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>list_receiptTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>set_delivery_callbackTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>list_deliveredTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>list_receiptTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>set_timeout_callbackTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>list_timeoutTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>elseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Too many files in served directory!Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>LOG_ERRORTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;You should implement a function to split the filelist over multiple packets.Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>LOG_ERRORTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Hint: The client already supports it :)Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>LOG_ERRORTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># After this, weTe6edf3&#39;re just going to keep the linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># open until the client requests a file. WeTe6edf3&#39;llTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># configure a function that getTe6edf3&#39;s called whenTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># the client sends a packet with a file request.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>set_packet_callbackTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>client_requestTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>elseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Client connected, but served path no longer exists!Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>LOG_ERRORTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>teardownTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nf"Tb4b4b4>client_disconnectedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Client disconnectedTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nf"Tb4b4b4>client_requestTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>messageTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>packetTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>globalTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>serve_pathTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>tryTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>filenameTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>messageTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>decodeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;utf-8Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>exceptTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"ne"Tb4b4b4>ExceptionTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>asTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>eTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>filenameTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>NoneTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>filenameTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"ow"Tb4b4b4>inTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>list_filesTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>():Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>tryTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># If we have the requested file, weTe6edf3&#39;llTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># read it and pack it as a resourceTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Client requested Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"se"Tb4b4b4>\Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>filenameTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"se"Tb4b4b4>\Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>fileTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>openTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>osTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>pathTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>joinTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>serve_pathTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>filenameTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>),Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;rbTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>file_resourceTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>ResourceTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>fileTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>packetTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>callbackTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>resource_sending_concludedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>file_resourceTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>filenameTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>filenameTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>exceptTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"ne"Tb4b4b4>ExceptionTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>asTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>eTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># If somethign went wrong, we closeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># the linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Error while reading file Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"se"Tb4b4b4>\Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>filenameTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"se"Tb4b4b4>\Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>LOG_ERRORTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>packetTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>teardownTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>raiseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>eTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>elseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># If we donTe6edf3&#39;t have it, we close the linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Client requested an unknown fileTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>packetTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>teardownTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># This function is called on the server when aTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># resource transfer concludes.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nf"Tb4b4b4>resource_sending_concludedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>resourceTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>hasattrTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>resourceTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;filenameTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>nameTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>resourceTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>filenameTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>elseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>nameTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;resourceTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>resourceTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>statusTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>==Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>ResourceTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>COMPLETETb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Done sending Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"se"Tb4b4b4>\Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>nameTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"se"Tb4b4b4>\Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4> to clientTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>elifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>resourceTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>statusTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>==Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>ResourceTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>FAILEDTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Sending Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"se"Tb4b4b4>\Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>nameTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"se"Tb4b4b4>\Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4> to client failedTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nf"Tb4b4b4>list_deliveredTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>receiptTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;The file list was received by the clientTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nf"Tb4b4b4>list_timeoutTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>receiptTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Sending list to client timed out, closing this linkTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>receiptTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>teardownTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>##########################################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>#### Client Part #########################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>##########################################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># We store a global list of files available on the serverTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_filesTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>[]Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># A reference to the server linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>NoneTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># And a reference to the current downloadTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>current_downloadTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>NoneTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>current_filenameTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>NoneTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># Variables to store download statisticsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>download_startedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"mi"Tb4b4b4>0Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>download_finishedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"mi"Tb4b4b4>0Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>download_timeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"mi"Tb4b4b4>0Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>transfer_sizeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"mi"Tb4b4b4>0Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>file_sizeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"mi"Tb4b4b4>0Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>


Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># This initialisation is executed when the users choosesTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># to run as a clientTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nf"Tb4b4b4>clientTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destination_hexhashTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configpathTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># We need a binary representation of the destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># hash that was entered on the command lineTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>tryTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>lenTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destination_hexhashTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>!=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"mi"Tb4b4b4>20Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>raiseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"ne"Tb4b4b4>ValueErrorTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Destination length is invalid, must be 20 hexadecimal characters (10 bytes)Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destination_hashTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>bytesTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>fromhexTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destination_hexhashTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>exceptTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Invalid destination entered. Check your input!Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"se"Tb4b4b4>\nTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>exitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># We must first initialise ReticulumTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>reticulumTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>ReticulumTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configpathTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>


Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># Check if we know a path to the destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"ow"Tb4b4b4>notTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>TransportTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>has_pathTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destination_hashTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Destination is not yet known. Requesting path and waiting for announce to arrive...Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>TransportTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>request_pathTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destination_hashTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>whileTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"ow"Tb4b4b4>notTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>TransportTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>has_pathTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destination_hashTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>timeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>sleepTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"mf"Tb4b4b4>0.1Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># Recall the server identityTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_identityTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>IdentityTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>recallTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destination_hashTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># Inform the user that weTe6edf3&#39;ll begin connectingTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Establishing link with server...Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># When the server identity is known, we setTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># up a destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>DestinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_identityTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>DestinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>OUTTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>DestinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>SINGLETb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>APP_NAMETb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;filetransferTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;serverTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># We also want to automatically prove incoming packetsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>set_proof_strategyTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>DestinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>PROVE_ALLTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># And create a linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>LinkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># We expect any normal data packets on the linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># to contain a list of served files, so we setTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># a callback accordinglyTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>set_packet_callbackTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>filelist_receivedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># WeTe6edf3&#39;ll also set up functions to inform theTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># user when the link is established or closedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>set_link_established_callbackTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>link_establishedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>set_link_closed_callbackTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>link_closedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># And set the link to automatically beginTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># downloading advertised resourcesTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>set_resource_strategyTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>LinkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>ACCEPT_ALLTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>set_resource_started_callbackTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>download_beganTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>set_resource_concluded_callbackTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>download_concludedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>menuTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># Requests the specified file from the serverTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nf"Tb4b4b4>downloadTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>filenameTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>globalTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>menu_modeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>current_filenameTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>transfer_sizeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>download_startedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>current_filenameTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>filenameTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>download_startedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"mi"Tb4b4b4>0Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>transfer_sizeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"mi"Tb4b4b4>0Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># We just create a packet containing theTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># requested filename, and send it down theTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># link. We also specify we donTe6edf3&#39;t need aTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># packet receipt.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>request_packetTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>PacketTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>filenameTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>encodeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;utf-8Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>),Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>create_receiptTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>FalseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>request_packetTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>sendTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>printTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>printTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>((Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Requested Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"se"Tb4b4b4>\Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>filenameTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"se"Tb4b4b4>\Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4> from server, waiting for download to begin...Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>))Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>menu_modeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;download_startedTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># This function runs a simple menu for the userTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># to select which files to download, or quitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>menu_modeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>NoneTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nf"Tb4b4b4>menuTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>():Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>globalTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_filesTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># Wait until we have a filelistTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>whileTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>lenTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_filesTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>==Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"mi"Tb4b4b4>0Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>timeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>sleepTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"mf"Tb4b4b4>0.1Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Ready!Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>timeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>sleepTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"mf"Tb4b4b4>0.5Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>globalTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>menu_modeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>menu_modeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;mainTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>should_quitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>FalseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>whileTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"ow"Tb4b4b4>notTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>should_quitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>print_menuTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>whileTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"ow"Tb4b4b4>notTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>menu_modeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>==Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;mainTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># WaitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>timeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>sleepTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"mf"Tb4b4b4>0.25Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>user_inputTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>inputTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>user_inputTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>==Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;qTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"ow"Tb4b4b4>orTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>user_inputTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>==Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;quitTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"ow"Tb4b4b4>orTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>user_inputTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>==Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;exitTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>should_quitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>TrueTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>printTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>elseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>user_inputTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"ow"Tb4b4b4>inTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_filesTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>downloadTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>user_inputTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>elseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>tryTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"mi"Tb4b4b4>0Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>Te6edf3&lt;=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>intTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>user_inputTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>Te6edf3&lt;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>lenTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_filesTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>downloadTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_filesTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>[Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>intTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>user_inputTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)])Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>exceptTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>passTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>should_quitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>teardownTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># Prints out menus or screens for theTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># various states of the client program.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># ItTe6edf3&#39;s simple and quite uninteresting.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># I wonTe6edf3&#39;t go into detail here. JustTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># strings basically.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nf"Tb4b4b4>print_menuTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>():Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>globalTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>menu_modeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>download_timeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>download_startedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>download_finishedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>transfer_sizeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>file_sizeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>menu_modeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>==Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;mainTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>clear_screenTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>print_filelistTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>printTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>printTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Select a file to download by entering name or number, or q to quitTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>printTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>((Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Te6edf3&gt; Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>),Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>endTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s1"Tb4b4b4>Te6edf3&#39; Te6edf3&#39;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>elifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>menu_modeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>==Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;download_startedTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>download_beganTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>timeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>timeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>whileTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>menu_modeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>==Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;download_startedTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>timeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>sleepTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"mf"Tb4b4b4>0.1Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>timeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>timeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>Te6edf3&gt;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>download_beganTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>APP_TIMEOUTTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>printTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;The download timed outTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>timeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>sleepTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"mi"Tb4b4b4>1Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>teardownTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>menu_modeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>==Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;downloadingTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>printTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Download startedTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>printTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>whileTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>menu_modeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>==Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;downloadingTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>globalTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>current_downloadTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>percentTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>roundTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>current_downloadTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>get_progressTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>*Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"mf"Tb4b4b4>100.0Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"mi"Tb4b4b4>1Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>printTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>((Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"se"Tb4b4b4>\rTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Progress: Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>strTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>percentTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot; % Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>),Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>endTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s1"Tb4b4b4>Te6edf3&#39; Te6edf3&#39;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>sysTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>stdoutTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>flushTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>timeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>sleepTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"mf"Tb4b4b4>0.1Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>menu_modeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>==Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;save_errorTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>printTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>((Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"se"Tb4b4b4>\rTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Progress: 100.0 %Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>),Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>endTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s1"Tb4b4b4>Te6edf3&#39; Te6edf3&#39;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>sysTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>stdoutTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>flushTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>printTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>printTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Could not write downloaded file to diskTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>current_downloadTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>statusTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>ResourceTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>FAILEDTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>menu_modeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;download_concludedTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>menu_modeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>==Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;download_concludedTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>current_downloadTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>statusTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>==Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>ResourceTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>COMPLETETb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>printTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>((Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"se"Tb4b4b4>\rTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Progress: 100.0 %Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>),Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>endTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s1"Tb4b4b4>Te6edf3&#39; Te6edf3&#39;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>sysTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>stdoutTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>flushTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># Print statisticsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>hoursTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>remTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>divmodTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>download_timeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"mi"Tb4b4b4>3600Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>minutesTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>secondsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>divmodTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>remTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"mi"Tb4b4b4>60Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>timestringTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"si"Tb4b4b4>{:0Te6edf3&gt;2}Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"si"Tb4b4b4>{:0Te6edf3&gt;2}Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"si"Tb4b4b4>{:05.2f}Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>formatTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>intTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>hoursTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>),Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>intTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>minutesTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>),Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>secondsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>printTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>printTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>printTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;--- Statistics -----Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>printTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"se"Tb4b4b4>\tTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Time taken : Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>timestringTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>printTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"se"Tb4b4b4>\tTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>File size : Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>size_strTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>file_sizeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>))Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>printTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"se"Tb4b4b4>\tTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Data transferred : Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>size_strTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>transfer_sizeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>))Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>printTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"se"Tb4b4b4>\tTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Effective rate : Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>size_strTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>file_sizeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>/Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>download_timeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>suffixTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s1"Tb4b4b4>Te6edf3&#39;bTe6edf3&#39;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;/sTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>printTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"se"Tb4b4b4>\tTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Transfer rate : Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>size_strTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>transfer_sizeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>/Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>download_timeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>suffixTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s1"Tb4b4b4>Te6edf3&#39;bTe6edf3&#39;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;/sTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>printTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>printTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;The download completed! Press enter to return to the menu.Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>printTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>inputTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>elseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>printTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>printTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;The download failed! Press enter to return to the menu.Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>inputTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>current_downloadTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>NoneTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>menu_modeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;mainTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>print_menuTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># This function prints out a list of filesTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># on the connected server.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nf"Tb4b4b4>print_filelistTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>():Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>globalTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_filesTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>printTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Files on server:Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>forTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>indexTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>fileTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"ow"Tb4b4b4>inTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>enumerateTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_filesTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>printTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"se"Tb4b4b4>\tTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>(Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>strTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>indexTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"se"Tb4b4b4>\tTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>fileTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nf"Tb4b4b4>filelist_receivedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>filelist_dataTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>packetTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>globalTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_filesTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>menu_modeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>tryTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># Unpack the list and extend ourTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># local list of available filesTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>filelistTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>umsgpackTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>unpackbTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>filelist_dataTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>forTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>fileTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"ow"Tb4b4b4>inTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>filelistTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"ow"Tb4b4b4>notTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>fileTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"ow"Tb4b4b4>inTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_filesTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_filesTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>appendTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>fileTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># If the menu is already visible,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># weTe6edf3&#39;ll update it with what wasTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># just receivedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>menu_modeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>==Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;mainTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>print_menuTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>exceptTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Invalid file list data received, closing linkTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>packetTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>teardownTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># This function is called when a linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># has been established with the serverTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nf"Tb4b4b4>link_establishedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># We store a reference to the linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># instance for later useTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>globalTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># Inform the user that the server isTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># connectedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Link established with serverTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Waiting for filelist...Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># And set up a small job to check forTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># a potential timeout in receiving theTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># file listTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>threadTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>threadingTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>ThreadTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>targetTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>filelist_timeout_jobTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>threadTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>setDaemonTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>TrueTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>threadTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>startTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># This job just sleeps for the specifiedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># time, and then checks if the file listTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># was received. If not, the program willTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># exit.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nf"Tb4b4b4>filelist_timeout_jobTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>():Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>timeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>sleepTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>APP_TIMEOUTTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>globalTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_filesTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>lenTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>server_filesTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>==Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"mi"Tb4b4b4>0Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Timed out waiting for filelist, exitingTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>osTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>_exitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"mi"Tb4b4b4>0Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>


Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># When a link is closed, weTe6edf3&#39;ll inform theTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># user, and exit the programTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nf"Tb4b4b4>link_closedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>teardown_reasonTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>==Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>LinkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>TIMEOUTTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;The link timed out, exiting nowTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>elifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>linkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>teardown_reasonTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>==Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>LinkTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>DESTINATION_CLOSEDTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;The link was closed by the server, exiting nowTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>elseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Link closed, exiting nowTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>ReticulumTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>exit_handlerTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>timeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>sleepTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"mf"Tb4b4b4>1.5Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>osTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>_exitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"mi"Tb4b4b4>0Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># When RNS detects that the download hasTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># started, weTe6edf3&#39;ll update our menu stateTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># so the user can be shown a progress ofTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># the download.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nf"Tb4b4b4>download_beganTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>resourceTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>globalTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>menu_modeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>current_downloadTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>download_startedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>transfer_sizeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>file_sizeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>current_downloadTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>resourceTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>download_startedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>==Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"mi"Tb4b4b4>0Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>download_startedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>timeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>timeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>transfer_sizeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>resourceTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>sizeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>file_sizeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>resourceTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>total_sizeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>menu_modeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;downloadingTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># When the download concludes, successfullyTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># or not, weTe6edf3&#39;ll update our menu state and Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># inform the user about how it all went.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nf"Tb4b4b4>download_concludedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>resourceTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>globalTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>menu_modeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>current_filenameTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>download_startedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>download_finishedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>download_timeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>download_finishedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>timeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>timeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>download_timeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>download_finishedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>-Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>download_startedTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>saved_filenameTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>current_filenameTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>resourceTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>statusTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>==Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>ResourceTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>COMPLETETb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>counterTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"mi"Tb4b4b4>0Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>whileTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>osTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>pathTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>isfileTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>saved_filenameTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>counterTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"mi"Tb4b4b4>1Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>saved_filenameTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>current_filenameTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;.Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>+Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>strTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>counterTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>tryTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>fileTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>openTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>saved_filenameTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;wbTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>fileTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>writeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>resourceTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>dataTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>readTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>())Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>fileTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>closeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>menu_modeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;download_concludedTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>exceptTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>menu_modeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;save_errorTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>elseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>menu_modeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;download_concludedTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># A convenience function for printing a human-Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># readable file sizeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nf"Tb4b4b4>size_strTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>numTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>suffixTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s1"Tb4b4b4>Te6edf3&#39;BTe6edf3&#39;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>unitsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>[Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s1"Tb4b4b4>Te6edf3&#39;Te6edf3&#39;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s1"Tb4b4b4>Te6edf3&#39;KiTe6edf3&#39;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s1"Tb4b4b4>Te6edf3&#39;MiTe6edf3&#39;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s1"Tb4b4b4>Te6edf3&#39;GiTe6edf3&#39;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s1"Tb4b4b4>Te6edf3&#39;TiTe6edf3&#39;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s1"Tb4b4b4>Te6edf3&#39;PiTe6edf3&#39;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s1"Tb4b4b4>Te6edf3&#39;EiTe6edf3&#39;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s1"Tb4b4b4>Te6edf3&#39;ZiTe6edf3&#39;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>]Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>last_unitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s1"Tb4b4b4>Te6edf3&#39;YiTe6edf3&#39;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>suffixTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>==Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s1"Tb4b4b4>Te6edf3&#39;bTe6edf3&#39;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>numTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>*=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"mi"Tb4b4b4>8Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>unitsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>[Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s1"Tb4b4b4>Te6edf3&#39;Te6edf3&#39;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s1"Tb4b4b4>Te6edf3&#39;KTe6edf3&#39;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s1"Tb4b4b4>Te6edf3&#39;MTe6edf3&#39;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s1"Tb4b4b4>Te6edf3&#39;GTe6edf3&#39;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s1"Tb4b4b4>Te6edf3&#39;TTe6edf3&#39;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s1"Tb4b4b4>Te6edf3&#39;PTe6edf3&#39;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s1"Tb4b4b4>Te6edf3&#39;ETe6edf3&#39;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s1"Tb4b4b4>Te6edf3&#39;ZTe6edf3&#39;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>]Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>last_unitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s1"Tb4b4b4>Te6edf3&#39;YTe6edf3&#39;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>forTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>unitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"ow"Tb4b4b4>inTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>unitsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>absTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>numTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>Te6edf3&lt;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"mf"Tb4b4b4>1024.0Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>returnTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"si"Tb4b4b4>%3.2fTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4> Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"si"Tb4b4b4>%s%sTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>%Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>numTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>unitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>suffixTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>numTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>/=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"mf"Tb4b4b4>1024.0Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>returnTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"si"Tb4b4b4>%.2fTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4> Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"si"Tb4b4b4>%s%sTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>%Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>numTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>last_unitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>suffixTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># A convenience function for clearing the screenTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>defTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nf"Tb4b4b4>clear_screenTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>():Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>osTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>systemTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s1"Tb4b4b4>Te6edf3&#39;clsTe6edf3&#39;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>osTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>nameTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>==Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s1"Tb4b4b4>Te6edf3&#39;ntTe6edf3&#39;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>elseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s1"Tb4b4b4>Te6edf3&#39;clearTe6edf3&#39;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>##########################################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>#### Program Startup #####################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4>##########################################################Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># This part of the program runs at startup,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># and parses input of from the user, and thenTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"c1"Tb4b4b4># starts up the desired program mode.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"vm"Tb4b4b4>__name__Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>==Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;__main__Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>tryTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>parserTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>argparseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>ArgumentParserTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>descriptionTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Simple file transfer server and client utilityTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>parserTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>add_argumentTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;-sTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;--serveTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>actionTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;storeTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>metavarTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;dirTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>helpTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;serve a directory of files to clientsTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>parserTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>add_argumentTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;--configTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>actionTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;storeTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>defaultTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>NoneTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>helpTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;path to alternative Reticulum config directoryTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>typeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>strTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>parserTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>add_argumentTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;destinationTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>nargsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;?Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>defaultTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>NoneTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>helpTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;hexadecimal hash of the server destinationTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>typeTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>strTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>argsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>parserTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>parse_argsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>argsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configargTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>argsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>elseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configargTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>=Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>NoneTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>argsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>serveTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>osTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>pathTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>isdirTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>argsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>serveTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>serverTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configargTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>argsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>serveTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>elseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>RNSTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>logTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;The specified directory does not existTe6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>elseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>ifTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>argsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>==Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"kc"Tb4b4b4>NoneTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>):Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>printTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>parserTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>print_helpTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>printTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>elseTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>clientTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>argsTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"o"Tb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>destinationTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>,Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>configargTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>

Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"k"Tb4b4b4>exceptTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4> Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"ne"Tb4b4b4>KeyboardInterruptTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>:Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"nb"Tb4b4b4>printTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>(Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"s2"Tb4b4b4>Te6edf3&quot;Te6edf3&quot;Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>)Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"n"Tb4b4b4>exitTb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>Tb4b4b4<Tff7b72span Te6edf3classTff7b72=Ta5d6ff"p"Tb4b4b4>()Tb4b4b4<Tb4b4b4/Tff7b72spanTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72preTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72pTb4b4b4>This example can also be found at Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference external" Te6edf3hrefTff7b72=Ta5d6ff"https://github.com/markqvist/Reticulum/blob/master/Examples/Filetransfer.py"Tb4b4b4>https://github.com/markqvist/Reticulum/blob/master/Examples/Filetransfer.pyTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>.Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>


Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"clearer"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"sphinxsidebar" Te6edf3roleTff7b72=Ta5d6ff"navigation" Te6edf3aria-labelTff7b72=Ta5d6ff"main navigation"Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"sphinxsidebarwrapper"Tb4b4b4>
Tb4b4b4<Tff7b72h3Tb4b4b4>Tb4b4b4<Tff7b72a Te6edf3hrefTff7b72=Ta5d6ff"index.html"Tb4b4b4>Table of ContentsTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72h3Tb4b4b4>
Tb4b4b4<Tff7b72ulTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"#"Tb4b4b4>ExamplesTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tff7b72ulTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"#minimal"Tb4b4b4>MinimalTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"#announce"Tb4b4b4>AnnounceTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"#broadcast"Tb4b4b4>BroadcastTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"#echo"Tb4b4b4>EchoTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"#link"Tb4b4b4>LinkTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"#example-identify"Tb4b4b4>IdentificationTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"#requests-responses"Tb4b4b4>Requests Te6edf3&amp; ResponsesTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72a Te6edf3classTff7b72=Ta5d6ff"reference internal" Te6edf3hrefTff7b72=Ta5d6ff"#filetransfer"Tb4b4b4>FiletransferTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72ulTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72ulTb4b4b4>

Tb4b4b4<Tff7b72h4Tb4b4b4>Previous topicTb4b4b4<Tb4b4b4/Tff7b72h4Tb4b4b4>
Tb4b4b4<Tff7b72p Te6edf3classTff7b72=Ta5d6ff"topless"Tb4b4b4>Tb4b4b4<Tff7b72a Te6edf3hrefTff7b72=Ta5d6ff"reference.html"
Te6edf3titleTff7b72=Ta5d6ff"previous chapter"Tb4b4b4>API ReferenceTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72pTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3roleTff7b72=Ta5d6ff"note" Te6edf3aria-labelTff7b72=Ta5d6ff"source link"Tb4b4b4>
Tb4b4b4<Tff7b72h3Tb4b4b4>This PageTb4b4b4<Tb4b4b4/Tff7b72h3Tb4b4b4>
Tb4b4b4<Tff7b72ul Te6edf3classTff7b72=Ta5d6ff"this-page-menu"Tb4b4b4>
Tb4b4b4<Tff7b72liTb4b4b4>Tb4b4b4<Tff7b72a Te6edf3hrefTff7b72=Ta5d6ff"_sources/examples.rst.txt"
Te6edf3relTff7b72=Ta5d6ff"nofollow"Tb4b4b4>Show SourceTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72ulTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3idTff7b72=Ta5d6ff"searchbox" Te6edf3styleTff7b72=Ta5d6ff"display: none" Te6edf3roleTff7b72=Ta5d6ff"search"Tb4b4b4>
Tb4b4b4<Tff7b72h3 Te6edf3idTff7b72=Ta5d6ff"searchlabel"Tb4b4b4>Quick searchTb4b4b4<Tb4b4b4/Tff7b72h3Tb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"searchformwrapper"Tb4b4b4>
Tb4b4b4<Tff7b72form Te6edf3classTff7b72=Ta5d6ff"search" Te6edf3actionTff7b72=Ta5d6ff"search.html" Te6edf3methodTff7b72=Ta5d6ff"get"Tb4b4b4>
Tb4b4b4<Tff7b72input Te6edf3typeTff7b72=Ta5d6ff"text" Te6edf3nameTff7b72=Ta5d6ff"q" Te6edf3aria-labelledbyTff7b72=Ta5d6ff"searchlabel" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tff7b72input Te6edf3typeTff7b72=Ta5d6ff"submit" Te6edf3valueTff7b72=Ta5d6ff"Go" Tb4b4b4/Tb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72formTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72scriptTb4b4b4>Te6edf3$Tb4b4b4(Ta5d6ff'#searchbox'Tb4b4b4)Tb4b4b4.Te6edf3showTb4b4b4(T79c0ff0Tb4b4b4)Tb4b4b4;Tb4b4b4<Tb4b4b4/Tff7b72scriptTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"clearer"Tb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"related" Te6edf3roleTff7b72=Ta5d6ff"navigation" Te6edf3aria-labelTff7b72=Ta5d6ff"related navigation"Tb4b4b4>
Tb4b4b4<Tff7b72h3Tb4b4b4>NavigationTb4b4b4<Tb4b4b4/Tff7b72h3Tb4b4b4>
Tb4b4b4<Tff7b72ulTb4b4b4>
Tb4b4b4<Tff7b72li Te6edf3classTff7b72=Ta5d6ff"right" Te6edf3styleTff7b72=Ta5d6ff"margin-right: 10px"Tb4b4b4>
Tb4b4b4<Tff7b72a Te6edf3hrefTff7b72=Ta5d6ff"genindex.html" Te6edf3titleTff7b72=Ta5d6ff"General Index"
Tb4b4b4>indexTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72li Te6edf3classTff7b72=Ta5d6ff"right" Tb4b4b4>
Tb4b4b4<Tff7b72a Te6edf3hrefTff7b72=Ta5d6ff"reference.html" Te6edf3titleTff7b72=Ta5d6ff"API Reference"
Tb4b4b4>previousTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4> |Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72li Te6edf3classTff7b72=Ta5d6ff"nav-item nav-item-0"Tb4b4b4>Tb4b4b4<Tff7b72a Te6edf3hrefTff7b72=Ta5d6ff"index.html"Tb4b4b4>Reticulum Network Stack 0.2.4 beta documentationTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4> Te6edf3&#187;Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tff7b72li Te6edf3classTff7b72=Ta5d6ff"nav-item nav-item-this"Tb4b4b4>Tb4b4b4<Tff7b72a Te6edf3hrefTff7b72=Ta5d6ff""Tb4b4b4>ExamplesTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4>Tb4b4b4<Tb4b4b4/Tff7b72liTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72ulTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tff7b72div Te6edf3classTff7b72=Ta5d6ff"footer" Te6edf3roleTff7b72=Ta5d6ff"contentinfo"Tb4b4b4>
Te6edf3&#169; Copyright 2021, Mark Qvist.
Created using Tb4b4b4<Tff7b72a Te6edf3hrefTff7b72=Ta5d6ff"https://www.sphinx-doc.org/"Tb4b4b4>SphinxTb4b4b4<Tb4b4b4/Tff7b72aTb4b4b4> 4.0.1.
Tb4b4b4<Tb4b4b4/Tff7b72divTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72bodyTb4b4b4>
Tb4b4b4<Tb4b4b4/Tff7b72htmlTb4b4b4>

Served by rngit 1.5.1 - Generated in 0.34s